package createmodel

import "fmt"

/*
	工厂方法模式
*/

type Product interface {
	Use()
}

type ProductA struct {
}

func (p *ProductA) Use() {
	fmt.Printf("use ProductA\n")
}

type ProductB struct {
}

func (p *ProductB) Use() {
	fmt.Printf("use ProductB\n")
}

// Creator 接口
type Creator interface {
	Factory() Product
}

type CreateProductA struct{}

func (c *CreateProductA) Factory() Product {
	return &ProductA{}
}

type CreateProductB struct{}

func (c *CreateProductB) Factory() Product {
	return &ProductB{}
}
